/*
* 一个众数消去一个非众数，留下来的就是众数
* */
public class Solution2 {
    public int MoreThanHalfNum_Solution(int [] array) {
        if(array == null || array.length==0) {
            return 0;
        }
/*        if(array.length==0||array == null  ) {
            return 0;
        }
        这样写会空指针异常，为什么会空指针异常?*/
        int result = array[0];//假设0下标元素就是众数
        int times = 1; // 众数出现次数
        for(int i=1;i<array.length;++i){
            if(times != 0){
                if(array[i] == result) {
                    ++times; // 相同则加1，表示“又出现一个众数”
                }else{
                    --times; // 不同则减1，表示“一个众数消去了一个非众数”
                }
            }
            //else：此时出现的众数已经消完了，从头重新开始
            else {
// 更新result的值为当前元素，并置次数为1
                result = array[i];
                times = 1;
            }
        }
// 判断result是否符合条件，即出现次数大于数组长度的一半
        times = 0;
        for(int i=0;i<array.length;++i){
            if(array[i] == result) ++times;
        }
        return (times > array.length/2) ? result : 0;
    }
}